package server

import (
    "context"
    "ez/grpc/{{ Name | lcfirst }}"
    "ez/vend/core"
    "ez/vend/event"
    "ez/vend/tool"
    "google.golang.org/grpc"
    "net"
)

//Default{{ Name }}Service 不允许扩展和订制，会被覆盖
type Default{{ Name }}Service struct {
    {{ Name | lcfirst }}.Unimplemented{{ Name }}Server
}

func (s Default{{ Name }}Service) HeartBeat(ctx context.Context,in *{{ Name | lcfirst }}.HeartBeatIn) ( *{{ Name | lcfirst }}.HeartBeatOut, error)   {
    out:=new({{ Name | lcfirst }}.HeartBeatOut)
    out.Now = in.Now
    return out, nil
}

func (s Default{{ Name }}Service) BroadcastListen(ctx context.Context,in *{{ Name | lcfirst }}.BroadcastListenIn) ( *{{ Name | lcfirst }}.BroadcastListenOut, error)   {
    ez.DispatchToMany(in.GetKey(),in.GetContent(),ctx)
    out:=new({{ Name | lcfirst }}.BroadcastListenOut)
    out.Code = 200
    out.Message = "OK！"
    return out, nil
}

//{{ Name }}Service是允许扩展和订制
type {{ Name }}Service struct {
    Default{{ Name }}Service
}

//默认并没有启动，需要手动启动
//请勿直接在本文件内操作，下次更新会覆盖
func {{ Name }}ServiceStart() {
    port := core.GetConfig("RpcPort::{{ Name }}").String()
    conn, err := net.Listen("tcp", port)
    ez.PrintError(err)
    server := grpc.NewServer()
    service := new({{ Name }}Service)
    {{ Name | lcfirst }}.Register{{ Name }}Server(server, service)
    err = server.Serve(conn)
    ez.PrintError(err)
}

//todo ------------------------------------------
//除了核心的接口已经默认实现，其他的都以注释的形式在这里呈现
//请在其他文件中实现他
{% for item in Api %}
//{{ item.Describe }}
//func (s {{ Name }}Service) {{ item.Name }}(ctx context.Context,in *{{ Name | lcfirst }}.{{ item.Name }}In) ( *{{ Name | lcfirst }}.{{ item.Name }}Out, error)   {
//  //panic("GRPC 内部的服务逻辑需要自行实现")
//  return nil, nil
//}

{% endfor %}
//todo ------------------------------------------